# Formål: importer data, fjern '9' i EQ-5D-kolonner, fjern ugyldige datoer,
# fjern test-indtastninger, generer beregnede kolonner: outcome delta, antal
# niveauer (i alt, 1 niv., 2 niv., mere end 2 niv.), return-to-work,
# Sygemelding i dage og uger, BMI, forbedring af gangdistance. Scripted tilføjer
# en ny kolonne 'klinik' med mere mundrette afdelingsbetegnelser Disse kan
# ændres i mappingfilen 'mapning_klinik.xlsx' der ligger i mappen \\data\ekstern
# Forfatter: Casper Friis Bjerre
# Organisation: Rygcenter Syddanmark, Rygkirurgisk Forskningsenhed, Kolding
# Input .csv data skal ligge i mappen \data\raw. Navngivning ligegyldig.
# Output data ligger i mappen \data\processed når scripted er færdigt.
# Dato: 30.09.2025
# =============================================================================
# --- 00) Pakker og kilder ----------------------------------------------------
suppressPackageStartupMessages({
library(here)
library(dplyr)
library(readr)
library(stringr)
library(rio)
library(tidyverse)
library(janitor)
})
# Kildescripts/helpers (ligger i scripts/)
source(here::here("scripts", "import.R"))                 # Importer udtræk
source(here::here("scripts", "fjern9_eq5d.R"))            # Fjern '9' fra EQ-5D
source(here::here("scripts", "rens_hoejde_vaegt.R"))      # Gyldig højde/vægt
source(here::here("scripts", "rens_dato.R"))              # Gyldig OP-dato
source(here::here("scripts", "beregn_bmi.R"))             # Beregn og oprens BMI
source(here::here("scripts", "beregn_deltas_fra_spec.R")) # Beregn deltaværdier
source(here::here("scripts", "return_to_work.R"))         # Return to work (0,1)
source(here::here("scripts", "mcid_gang.R"))              # MCID gangdistance (0,1)
source(here::here("scripts", "sygem_varighed.R"))         # Varighed af sygemelding
source(here::here("scripts", "niveauer.R"))               # Antal niveauer
source(here::here("scripts", "klinik_map.R"))             # Klinik mapping
source(here::here("scripts", "date_utils.R"))             # Dato parser
# --- 01) Importer data -------------------------------------------------------
df <- read_csv_robust(INPUT_FILE)
# --- 02) Gør kolonnenavne R-venlige ------------------------------------------
df <- janitor::clean_names(df)
df
# Strip tid (00:00:00) fra datoer
for (nm in c("bas_pre_syg_da", "aar1_opf_a1rask")) {
s <- as.character(df[[nm]])
s <- sub(" .*", "", s)                     # fjern " 00:00:00"
df[[nm]] <- as.Date(s, format = "%d-%m-%Y")
}
View(df)
# =============================================================================
# KLARGØR DANESPINE UDTRÆK (LÆNDERYG) – HOVEDSCRIPT
#
# Formål: importer data, fjern '9' i EQ-5D-kolonner, fjern ugyldige datoer,
# fjern test-indtastninger, generer beregnede kolonner: outcome delta, antal
# niveauer (i alt, 1 niv., 2 niv., mere end 2 niv.), return-to-work,
# Sygemelding i dage og uger, BMI, forbedring af gangdistance. Scripted tilføjer
# en ny kolonne 'klinik' med mere mundrette afdelingsbetegnelser Disse kan
# ændres i mappingfilen 'mapning_klinik.xlsx' der ligger i mappen \\data\ekstern
# Forfatter: Casper Friis Bjerre
# Organisation: Rygcenter Syddanmark, Rygkirurgisk Forskningsenhed, Kolding
# Input .csv data skal ligge i mappen \data\raw. Navngivning ligegyldig.
# Output data ligger i mappen \data\processed når scripted er færdigt.
# Dato: 30.09.2025
# =============================================================================
# --- 00) Pakker og kilder ----------------------------------------------------
suppressPackageStartupMessages({
library(here)
library(dplyr)
library(readr)
library(stringr)
library(rio)
library(tidyverse)
library(janitor)
})
# Kildescripts/helpers (ligger i scripts/)
source(here::here("scripts", "import.R"))                 # Importer udtræk
source(here::here("scripts", "fjern9_eq5d.R"))            # Fjern '9' fra EQ-5D
source(here::here("scripts", "rens_hoejde_vaegt.R"))      # Gyldig højde/vægt
source(here::here("scripts", "rens_dato.R"))              # Gyldig OP-dato
source(here::here("scripts", "beregn_bmi.R"))             # Beregn og oprens BMI
source(here::here("scripts", "beregn_deltas_fra_spec.R")) # Beregn deltaværdier
source(here::here("scripts", "return_to_work.R"))         # Return to work (0,1)
source(here::here("scripts", "mcid_gang.R"))              # MCID gangdistance (0,1)
source(here::here("scripts", "sygem_varighed.R"))         # Varighed af sygemelding
source(here::here("scripts", "niveauer.R"))               # Antal niveauer
source(here::here("scripts", "klinik_map.R"))             # Klinik mapping
source(here::here("scripts", "date_utils.R"))             # Dato parser
# --- 01) Importer data -------------------------------------------------------
df <- read_csv_robust(INPUT_FILE)
# --- 02) Gør kolonnenavne R-venlige ------------------------------------------
df <- janitor::clean_names(df)
df
# Strip tid (00:00:00) fra datoer
for (nm in c("bas_pre_syg_da", "aar1_opf_a1rask")) {
s <- as.character(df[[nm]])
s <- sub(" .*", "", s)                     # fjern " 00:00:00"
df[[nm]] <- as.Date(s, format = "%d-%m-%Y")
}
# --- 04) Oprensning af data --------------------------------------------------
# Fjern 9-taller i EQ-5D kolonner
df <- remove9_eq5d(df)
# Max/min for højde og vægt
df <- rens(df, bas_pre_hoej, bas_pre_vaegt)
# Fjern cases med ugyldige datoer
date_cols <- c("op_op_opdato", "bas_pre_syg_da",
"aar1_opf_a1rask", "aar2_opf_a2rask",
"re_op_re_op_dato")
df <- rens_dato(df, date_cols)
# =============================================================================
# KLARGØR DANESPINE UDTRÆK (LÆNDERYG) – HOVEDSCRIPT
#
# Formål: importer data, fjern '9' i EQ-5D-kolonner, fjern ugyldige datoer,
# fjern test-indtastninger, generer beregnede kolonner: outcome delta, antal
# niveauer (i alt, 1 niv., 2 niv., mere end 2 niv.), return-to-work,
# Sygemelding i dage og uger, BMI, forbedring af gangdistance. Scripted tilføjer
# en ny kolonne 'klinik' med mere mundrette afdelingsbetegnelser Disse kan
# ændres i mappingfilen 'mapning_klinik.xlsx' der ligger i mappen \\data\ekstern
# Forfatter: Casper Friis Bjerre
# Organisation: Rygcenter Syddanmark, Rygkirurgisk Forskningsenhed, Kolding
# Input .csv data skal ligge i mappen \data\raw. Navngivning ligegyldig.
# Output data ligger i mappen \data\processed når scripted er færdigt.
# Dato: 30.09.2025
# =============================================================================
# --- 00) Pakker og kilder ----------------------------------------------------
suppressPackageStartupMessages({
library(here)
library(dplyr)
library(readr)
library(stringr)
library(rio)
library(tidyverse)
library(janitor)
})
# Kildescripts/helpers (ligger i scripts/)
source(here::here("scripts", "import.R"))                 # Importer udtræk
source(here::here("scripts", "fjern9_eq5d.R"))            # Fjern '9' fra EQ-5D
source(here::here("scripts", "rens_hoejde_vaegt.R"))      # Gyldig højde/vægt
source(here::here("scripts", "rens_dato.R"))              # Gyldig OP-dato
source(here::here("scripts", "beregn_bmi.R"))             # Beregn og oprens BMI
source(here::here("scripts", "beregn_deltas_fra_spec.R")) # Beregn deltaværdier
source(here::here("scripts", "return_to_work.R"))         # Return to work (0,1)
source(here::here("scripts", "mcid_gang.R"))              # MCID gangdistance (0,1)
source(here::here("scripts", "sygem_varighed.R"))         # Varighed af sygemelding
source(here::here("scripts", "niveauer.R"))               # Antal niveauer
source(here::here("scripts", "klinik_map.R"))             # Klinik mapping
source(here::here("scripts", "date_utils.R"))             # Dato parser
# --- 01) Importer data -------------------------------------------------------
df <- read_csv_robust(INPUT_FILE)
# --- 02) Gør kolonnenavne R-venlige ------------------------------------------
df <- janitor::clean_names(df)
df
# Strip tid (00:00:00) fra datoer
for (nm in c("bas_pre_syg_da", "aar1_opf_a1rask")) {
s <- as.character(df[[nm]])
s <- sub(" .*", "", s)                     # fjern " 00:00:00"
df[[nm]] <- as.Date(s, format = "%d-%m-%Y")
}
# --- 04) Oprensning af data --------------------------------------------------
# Fjern 9-taller i EQ-5D kolonner
df <- remove9_eq5d(df)
# Max/min for højde og vægt
df <- rens(df, bas_pre_hoej, bas_pre_vaegt)
# Fjern cases med ugyldige datoer
date_cols <- c("op_op_opdato", "bas_pre_syg_da",
"aar1_opf_a1rask", "aar2_opf_a2rask",
"re_op_re_op_dato")
df <- rens_dato(df, date_cols)
# Generer deltaværdier
df <- beregn_deltas_fra_spec(df, spec_file =
"data/ekstern/beskrivelse_beregnede_kolonner.xlsx")
# Generer BMI og behold gyldigt interval (12 - 50)
df <- beregn_bmi(df)
# Generer deltaværdier
df <- beregn_deltas_fra_spec(df, spec_file =
"data/ekstern/beskrivelse_beregnede_kolonner.xlsx")
# =============================================================================
# KLARGØR DANESPINE UDTRÆK (LÆNDERYG) – HOVEDSCRIPT
#
# Formål: importer data, fjern '9' i EQ-5D-kolonner, fjern ugyldige datoer,
# fjern test-indtastninger, generer beregnede kolonner: outcome delta, antal
# niveauer (i alt, 1 niv., 2 niv., mere end 2 niv.), return-to-work,
# Sygemelding i dage og uger, BMI, forbedring af gangdistance. Scripted tilføjer
# en ny kolonne 'klinik' med mere mundrette afdelingsbetegnelser Disse kan
# ændres i mappingfilen 'mapning_klinik.xlsx' der ligger i mappen \\data\ekstern
# Forfatter: Casper Friis Bjerre
# Organisation: Rygcenter Syddanmark, Rygkirurgisk Forskningsenhed, Kolding
# Input .csv data skal ligge i mappen \data\raw. Navngivning ligegyldig.
# Output data ligger i mappen \data\processed når scripted er færdigt.
# Dato: 30.09.2025
# =============================================================================
# --- 00) Pakker og kilder ----------------------------------------------------
suppressPackageStartupMessages({
library(here)
library(dplyr)
library(readr)
library(stringr)
library(rio)
library(tidyverse)
library(janitor)
})
# Kildescripts/helpers (ligger i scripts/)
source(here::here("scripts", "import.R"))                 # Importer udtræk
source(here::here("scripts", "fjern9_eq5d.R"))            # Fjern '9' fra EQ-5D
source(here::here("scripts", "rens_hoejde_vaegt.R"))      # Gyldig højde/vægt
source(here::here("scripts", "rens_dato.R"))              # Gyldig OP-dato
source(here::here("scripts", "beregn_bmi.R"))             # Beregn og oprens BMI
source(here::here("scripts", "beregn_deltas_fra_spec.R")) # Beregn deltaværdier
source(here::here("scripts", "return_to_work.R"))         # Return to work (0,1)
source(here::here("scripts", "mcid_gang.R"))              # MCID gangdistance (0,1)
source(here::here("scripts", "sygem_varighed.R"))         # Varighed af sygemelding
source(here::here("scripts", "niveauer.R"))               # Antal niveauer
source(here::here("scripts", "klinik_map.R"))             # Klinik mapping
source(here::here("scripts", "date_utils.R"))             # Dato parser
# --- 01) Importer data -------------------------------------------------------
df <- read_csv_robust(INPUT_FILE)
# --- 02) Gør kolonnenavne R-venlige ------------------------------------------
df <- janitor::clean_names(df)
df
# Strip tid (00:00:00) fra datoer
for (nm in c("bas_pre_syg_da", "aar1_opf_a1rask")) {
s <- as.character(df[[nm]])
s <- sub(" .*", "", s)                     # fjern " 00:00:00"
df[[nm]] <- as.Date(s, format = "%d-%m-%Y")
}
# --- 04) Oprensning af data --------------------------------------------------
# Fjern 9-taller i EQ-5D kolonner
df <- remove9_eq5d(df)
# Max/min for højde og vægt½
df <- rens(df, bas_pre_hoej, bas_pre_vaegt)
# Fjern testindtastninger
ids <- c(101011320, 312331234, 505552222)
df <- df[!(df$cp_rnr %in% ids), ]
# --- 05) Dan beregnede kolonner ----------------------------------------------
# Generer BMI og behold gyldigt interval (12 - 50)
df <- beregn_bmi(df)
# Generer deltaværdier
df <- beregn_deltas_fra_spec(df, spec_file =
"data/ekstern/beskrivelse_beregnede_kolonner.xlsx")
# Generer deltaværdier
df <- beregn_deltas_fra_spec(df, spec_file =
"data/ekstern/beskrivelse_beregnede_kolonner.xlsx")
# =============================================================================
# KLARGØR DANESPINE UDTRÆK (LÆNDERYG) – HOVEDSCRIPT
#
# Formål: importer data, fjern '9' i EQ-5D-kolonner, fjern ugyldige datoer,
# fjern test-indtastninger, generer beregnede kolonner: outcome delta, antal
# niveauer (i alt, 1 niv., 2 niv., mere end 2 niv.), return-to-work,
# Sygemelding i dage og uger, BMI, forbedring af gangdistance. Scripted tilføjer
# en ny kolonne 'klinik' med mere mundrette afdelingsbetegnelser Disse kan
# ændres i mappingfilen 'mapning_klinik.xlsx' der ligger i mappen \\data\ekstern
# Forfatter: Casper Friis Bjerre
# Organisation: Rygcenter Syddanmark, Rygkirurgisk Forskningsenhed, Kolding
# Input .csv data skal ligge i mappen \data\raw. Navngivning ligegyldig.
# Output data ligger i mappen \data\processed når scripted er færdigt.
# Dato: 30.09.2025
# =============================================================================
View(df)
# =============================================================================
# KLARGØR DANESPINE UDTRÆK (LÆNDERYG) – HOVEDSCRIPT
#
# Formål: importer data, fjern '9' i EQ-5D-kolonner, fjern ugyldige datoer,
# fjern test-indtastninger, generer beregnede kolonner: outcome delta, antal
# niveauer (i alt, 1 niv., 2 niv., mere end 2 niv.), return-to-work,
# Sygemelding i dage og uger, BMI, forbedring af gangdistance. Scripted tilføjer
# en ny kolonne 'klinik' med mere mundrette afdelingsbetegnelser Disse kan
# ændres i mappingfilen 'mapning_klinik.xlsx' der ligger i mappen \\data\ekstern
# Forfatter: Casper Friis Bjerre
# Organisation: Rygcenter Syddanmark, Rygkirurgisk Forskningsenhed, Kolding
# Input .csv data skal ligge i mappen \data\raw. Navngivning ligegyldig.
# Output data ligger i mappen \data\processed når scripted er færdigt.
# Dato: 30.09.2025
# =============================================================================
# --- 00) Pakker og kilder ----------------------------------------------------
suppressPackageStartupMessages({
library(here)
library(dplyr)
library(readr)
library(stringr)
library(rio)
library(tidyverse)
library(janitor)
})
# Kildescripts/helpers (ligger i scripts/)
source(here::here("scripts", "import.R"))                 # Importer udtræk
source(here::here("scripts", "fjern9_eq5d.R"))            # Fjern '9' fra EQ-5D
source(here::here("scripts", "rens_hoejde_vaegt.R"))      # Gyldig højde/vægt
source(here::here("scripts", "rens_dato.R"))              # Gyldig OP-dato
source(here::here("scripts", "beregn_bmi.R"))             # Beregn og oprens BMI
source(here::here("scripts", "beregn_deltas_fra_spec.R")) # Beregn deltaværdier
source(here::here("scripts", "return_to_work.R"))         # Return to work (0,1)
source(here::here("scripts", "mcid_gang.R"))              # MCID gangdistance (0,1)
source(here::here("scripts", "sygem_varighed.R"))         # Varighed af sygemelding
source(here::here("scripts", "niveauer.R"))               # Antal niveauer
source(here::here("scripts", "klinik_map.R"))             # Klinik mapping
source(here::here("scripts", "date_utils.R"))             # Dato parser
# --- 01) Importer data -------------------------------------------------------
df <- read_csv_robust(INPUT_FILE)
# --- 02) Gør kolonnenavne R-venlige ------------------------------------------
df <- janitor::clean_names(df)
df
# Strip tid (00:00:00) fra datoer
for (nm in c("bas_pre_syg_da", "aar1_opf_a1rask", "op_op_opdato", "aar2_opf_a2rask", "re_op_re_op_dato")) {
s <- as.character(df[[nm]])
s <- sub(" .*", "", s)                     # fjern " 00:00:00"
df[[nm]] <- as.Date(s, format = "%d-%m-%Y")
}
# --- 04) Oprensning af data --------------------------------------------------
# Fjern 9-taller i EQ-5D kolonner
df <- remove9_eq5d(df)
# Max/min for højde og vægt½
df <- rens(df, bas_pre_hoej, bas_pre_vaegt)
# Fjern cases med ugyldige datoer
date_cols <- c("op_op_opdato", "bas_pre_syg_da",
"aar1_opf_a1rask", "aar2_opf_a2rask",
"re_op_re_op_dato")
df <- rens_dato(df, date_cols)
# --- 00) Pakker og kilder ----------------------------------------------------
suppressPackageStartupMessages({
library(here)
library(dplyr)
library(readr)
library(stringr)
library(rio)
library(tidyverse)
library(janitor)
})
# Kildescripts/helpers (ligger i scripts/)
source(here::here("scripts", "import.R"))                 # Importer udtræk
# =============================================================================
# KLARGØR DANESPINE UDTRÆK (LÆNDERYG) – HOVEDSCRIPT
#
# Formål: importer data, fjern '9' i EQ-5D-kolonner, fjern ugyldige datoer,
# fjern test-indtastninger, generer beregnede kolonner: outcome delta, antal
# niveauer (i alt, 1 niv., 2 niv., mere end 2 niv.), return-to-work,
# Sygemelding i dage og uger, BMI, forbedring af gangdistance. Scripted tilføjer
# en ny kolonne 'klinik' med mere mundrette afdelingsbetegnelser Disse kan
# ændres i mappingfilen 'mapning_klinik.xlsx' der ligger i mappen \\data\ekstern
# Forfatter: Casper Friis Bjerre
# Organisation: Rygcenter Syddanmark, Rygkirurgisk Forskningsenhed, Kolding
# Input .csv data skal ligge i mappen \data\raw. Navngivning ligegyldig.
# Output data ligger i mappen \data\processed når scripted er færdigt.
# Dato: 30.09.2025
# =============================================================================
# --- 00) Pakker og kilder ----------------------------------------------------
suppressPackageStartupMessages({
library(here)
library(dplyr)
library(readr)
library(stringr)
library(rio)
library(tidyverse)
library(janitor)
})
# Kildescripts/helpers (ligger i scripts/)
source(here::here("scripts", "import.R"))                 # Importer udtræk
source(here::here("scripts", "fjern9_eq5d.R"))            # Fjern '9' fra EQ-5D
source(here::here("scripts", "rens_hoejde_vaegt.R"))      # Gyldig højde/vægt
source(here::here("scripts", "rens_dato.R"))              # Gyldig OP-dato
source(here::here("scripts", "beregn_bmi.R"))             # Beregn og oprens BMI
source(here::here("scripts", "beregn_deltas_fra_spec.R")) # Beregn deltaværdier
source(here::here("scripts", "return_to_work.R"))         # Return to work (0,1)
source(here::here("scripts", "mcid_gang.R"))              # MCID gangdistance (0,1)
source(here::here("scripts", "sygem_varighed.R"))         # Varighed af sygemelding
source(here::here("scripts", "niveauer.R"))               # Antal niveauer
source(here::here("scripts", "klinik_map.R"))             # Klinik mapping
source(here::here("scripts", "date_utils.R"))             # Dato parser
# --- 01) Importer data -------------------------------------------------------
df <- read_csv_robust(INPUT_FILE)
# --- 02) Gør kolonnenavne R-venlige ------------------------------------------
df <- janitor::clean_names(df)
df
# Strip tid (00:00:00) fra datoer
for (nm in c("bas_pre_syg_da", "aar1_opf_a1rask")) {
s <- as.character(df[[nm]])
s <- sub(" .*", "", s)                     # fjern " 00:00:00"
df[[nm]] <- as.Date(s, format = "%d-%m-%Y")
}
# --- 04) Oprensning af data --------------------------------------------------
# Fjern 9-taller i EQ-5D kolonner
df <- remove9_eq5d(df)
# Max/min for højde og vægt
df <- rens(df, bas_pre_hoej, bas_pre_vaegt)
# Fjern cases med ugyldige datoer
date_cols <- c("op_op_opdato", "bas_pre_syg_da",
"aar1_opf_a1rask", "aar2_opf_a2rask",
"re_op_re_op_dato")
df <- rens_dato(df, date_cols)
# Fjern testindtastninger
ids <- c(101011320, 312331234, 505552222)
df <- df[!(df$cp_rnr %in% ids), ]
# Erstatter manglende datoer med forløbsdatoen
df <- df %>%
mutate(
op_op_opdato = .parse_date(op_op_opdato),
forlobsdato  = .parse_date(forlobsdato),
op_op_opdato = coalesce(op_op_opdato, forlobsdato)  # udfyld NA med forlobsdato
)
# --- 05) Dan beregnede kolonner ----------------------------------------------
# Generer BMI og behold gyldigt interval (12 - 50)
df <- beregn_bmi(df)
# Generer deltaværdier
df <- beregn_deltas_fra_spec(df, spec_file =
"data/ekstern/beskrivelse_beregnede_kolonner.xlsx")
# Beregn return-to-work (0 = ja, 1 = nej)
df <- derive_rtw_simple(df)
table(df$return_to_work, useNA = "ifany")
# Beregner forbedring i gangdistance år 1 (0 = ja, 1 = nej)
df <- derive_mcid_gang(df)
table(df$mcid_gang, useNA = "ifany")
# Beregner varighed af sygemelding (dage, uger)
df <- sygem_varighed(df)
# Beregner antal niveauer (i alt), 1 niv., 2 niv., mere end 2 niv.)
df <- niveau(df)
table(df$niveau, useNA = "ifany")
colSums(df[, c("niveau_1","niveau_2","niveau_mer")], na.rm = TRUE)
# --- 06) Klinik navne, mundrette ---------------------------------------------
df <- klinik(df, path = "data/ekstern/mapning_klinik.xlsx")
# --- 07) Omdøb variable ------------------------------------------------------
df <- df %>% rename(cpr_nr = cp_rnr)  # ny = gammel
# --- 08) Eksporter datasættet ------------------------------------------------
rio::export(df, here::here("data","processed","df.xlsx"))
# =============================================================================
# KLARGØR DANESPINE UDTRÆK (LÆNDERYG) – HOVEDSCRIPT
#
# Formål: importer data, fjern '9' i EQ-5D-kolonner, fjern ugyldige datoer,
# fjern test-indtastninger, generer beregnede kolonner: outcome delta, antal
# niveauer (i alt, 1 niv., 2 niv., mere end 2 niv.), return-to-work,
# Sygemelding i dage og uger, BMI, forbedring af gangdistance. Scripted tilføjer
# en ny kolonne 'klinik' med mere mundrette afdelingsbetegnelser Disse kan
# ændres i mappingfilen 'mapning_klinik.xlsx' der ligger i mappen \\data\ekstern
# Forfatter: Casper Friis Bjerre
# Organisation: Rygcenter Syddanmark, Rygkirurgisk Forskningsenhed, Kolding
# Input .csv data skal ligge i mappen \data\raw. Navngivning ligegyldig.
# Output data ligger i mappen \data\processed når scripted er færdigt.
# Dato: 30.09.2025
# =============================================================================
# --- 00) Pakker og kilder ----------------------------------------------------
suppressPackageStartupMessages({
library(here)
library(dplyr)
library(readr)
library(stringr)
library(rio)
library(tidyverse)
library(janitor)
})
# Kildescripts/helpers (ligger i scripts/)
source(here::here("scripts", "import.R"))                 # Importer udtræk
source(here::here("scripts", "fjern9_eq5d.R"))            # Fjern '9' fra EQ-5D
source(here::here("scripts", "rens_hoejde_vaegt.R"))      # Gyldig højde/vægt
source(here::here("scripts", "rens_dato.R"))              # Gyldig OP-dato
source(here::here("scripts", "beregn_bmi.R"))             # Beregn og oprens BMI
source(here::here("scripts", "beregn_deltas_fra_spec.R")) # Beregn deltaværdier
source(here::here("scripts", "return_to_work.R"))         # Return to work (0,1)
source(here::here("scripts", "mcid_gang.R"))              # MCID gangdistance (0,1)
source(here::here("scripts", "sygem_varighed.R"))         # Varighed af sygemelding
source(here::here("scripts", "niveauer.R"))               # Antal niveauer
source(here::here("scripts", "klinik_map.R"))             # Klinik mapping
source(here::here("scripts", "date_utils.R"))             # Dato parser
# --- 01) Importer data -------------------------------------------------------
df <- read_csv_robust(INPUT_FILE)
# --- 02) Gør kolonnenavne R-venlige ------------------------------------------
df <- janitor::clean_names(df)
df
# Strip tid (00:00:00) fra datoer
for (nm in c("bas_pre_syg_da", "aar1_opf_a1rask")) {
s <- as.character(df[[nm]])
s <- sub(" .*", "", s)                     # fjern " 00:00:00"
df[[nm]] <- as.Date(s, format = "%d-%m-%Y")
}
# --- 04) Oprensning af data --------------------------------------------------
# Fjern 9-taller i EQ-5D kolonner
df <- remove9_eq5d(df)
# Max/min for højde og vægt
df <- rens(df, bas_pre_hoej, bas_pre_vaegt)
# Fjern cases med ugyldige datoer
date_cols <- c("op_op_opdato", "bas_pre_syg_da",
"aar1_opf_a1rask", "aar2_opf_a2rask",
"re_op_re_op_dato")
df <- rens_dato(df, date_cols)
# Fjern testindtastninger
ids <- c(101011320, 312331234, 505552222)
df <- df[!(df$cp_rnr %in% ids), ]
# Erstatter manglende datoer med forløbsdatoen
df <- df %>%
mutate(
op_op_opdato = .parse_date(op_op_opdato),
forlobsdato  = .parse_date(forlobsdato),
op_op_opdato = coalesce(op_op_opdato, forlobsdato)  # udfyld NA med forlobsdato
)
# --- 05) Dan beregnede kolonner ----------------------------------------------
# Generer BMI og behold gyldigt interval (12 - 50)
df <- beregn_bmi(df)
# Generer deltaværdier
df <- beregn_deltas_fra_spec(df, spec_file =
"data/ekstern/beskrivelse_beregnede_kolonner.xlsx")
# Beregn return-to-work (0 = ja, 1 = nej)
df <- derive_rtw_simple(df)
table(df$return_to_work, useNA = "ifany")
# Beregner forbedring i gangdistance år 1 (0 = ja, 1 = nej)
df <- derive_mcid_gang(df)
table(df$mcid_gang, useNA = "ifany")
# Beregner varighed af sygemelding (dage, uger)
df <- sygem_varighed(df)
# Beregner antal niveauer (i alt), 1 niv., 2 niv., mere end 2 niv.)
df <- niveau(df)
table(df$niveau, useNA = "ifany")
colSums(df[, c("niveau_1","niveau_2","niveau_mer")], na.rm = TRUE)
# --- 06) Klinik navne, mundrette ---------------------------------------------
df <- klinik(df, path = "data/ekstern/mapning_klinik.xlsx")
# --- 07) Omdøb variable ------------------------------------------------------
df <- df %>% rename(cpr_nr = cp_rnr)  # ny = gammel
# --- 08) Eksporter datasættet ------------------------------------------------
rio::export(df, here::here("data","processed","df.xlsx"))
